`
https://leetcode.cn/problems/array-nesting/
`

/**
 * @param {number[]} nums
 * @return {number}
 */
var arrayNesting = function (nums) {
  // 该题本质上是求数组中最长的环长度
  // 使用 used 数组来标记访问过的数字
  // 每次从未访问的数字开始，遍历整个环，直到回到起点
  // 记录环的长度，更新最大长度
  const n = nums.length
  const used = new Array(n).fill(false)
  let res = 0

  for (let i = 0; i < n; i++) {
    // 如果当前数字已经被访问过，则跳过
    if (used[i]) continue
    let cur = i
    let count = 0
    // 遍历环，直到回到起点
    while (!used[cur]) {
      used[cur] = true
      cur = nums[cur]
      count++
    }
    // 更新最大长度
    res = Math.max(res, count)
  }

  return res
};